// coordtransform.js
const PI = 3.1415926535897932384626;
const a = 6378245.0;  // 卫星椭球坐标投影到平面地图坐标系的投影因子
const ee = 0.00669342162296594323; // 椭球的偏心率

// WGS84转GCJ-02（高德坐标系）
export function wgs84ToGcj02(lng, lat) {
  if (outOfChina(lng, lat)) return [lng, lat];
  let dlat = transformLat(lng - 105.0, lat - 35.0);
  let dlng = transformLng(lng - 105.0, lat - 35.0);
  const radlat = lat / 180.0 * PI;
  let magic = Math.sin(radlat);
  magic = 1 - ee * magic * magic;
  const sqrtmagic = Math.sqrt(magic);
  dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
  dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
  const mglat = lat + dlat;
  const mglng = lng + dlng;
  return [mglng, mglat];
}

// 百度坐标系BD-09转GCJ-02
export function bd09ToGcj02(bdLng, bdLat) {
  const x = bdLng - 0.0065;
  const y = bdLat - 0.006;
  const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * PI);
  const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * PI);
  const ggLng = z * Math.cos(theta);
  const ggLat = z * Math.sin(theta);
  return [ggLng, ggLat];
}

// 检查坐标是否在中国以外
function outOfChina(lng, lat) {
  return (lng < 72.004 || lng > 137.8347) || (lat < 0.8293 || lat > 55.8271);
}